import request from "./apiManager.js";

function apiShowLoading(loading_flag, loading_text) {
	if (loading_flag) {
		// 加载提示
		uni.showLoading({
			title: loading_text,
			mask: true
		});
	}
}


/**
 * 添加api方法，方便统一管理，挂载于window._api  ** 一般不需要直接使用该函数 **
 * @author 张振东
 * @param config
 * @param params
 * @param {object} options 配置对象，以下为配置对象的各字段。
 * name       {string} 调用该接口的方法名
 * url        {string} 接口路径，不包括base路径
 * method     {string} 方式，get or post，默认get
 * apiParams  {object} 传入一个对象，为调用该接口时的默认参数，当使用时传入的参数与默认参数冲突时，默认参数将被覆盖
 * loading    {bool, string} 调用接口时启用loading提示，默认为false，当传入一个字符串时，将在转圈下显示该文字
 * msg        {bool, string} 出现错误时(接口返回result字段为false，或网络超时)，弹出提示
 *                           msg = true：当result为false时，文字使用message字段内容。超时时，文字使用“网络错误”
 *                           msg = 字符串：result为false时，显示该字符串。超时时同上
 * resultMode {bool} 接口返回的数据以result字段作为主体时使用（如获取收藏状态等），直接返回result
 */
const networkRequest = (config,params = {},options = {})=> {
	const method = config.method === undefined ? "get" : config.method;
	const apiParams = config.apiParams === undefined ? {} : config.apiParams;
	const _loading = config.loading === undefined ? false : config.loading;
	const resultMode = config.resultMode === undefined ? false : config.resultMode;

	let loading = typeof options.loading !== "undefined" ? options.loading : _loading;

	return new Promise((resolve, reject) => {
		if(_loading){
			apiShowLoading(true, loading);
		}
		params = { ...apiParams,
			...params
		};
		// console.log(params);
		// console.log(method);
		request({
			url: config.url,
			method,
			...({
				[method === 'get' ? 'params' : 'data']: params
			}),
			host_flag:config.host_flag
		}).finally(() => {
			uni.hideLoading();
		}).then(res => {
				// console.log(res)
				if (res.data.success) {
					resolve(res);
				} else {
					reject(res);
				}
			}).catch(e => {
				console.log(e);
				// msg && _alert && _alert.toast(netWorkErrorMsg, 'cancel')
				reject(e);
			});
	});
};

export default networkRequest;
